package algocasts;

public class P42_StringToInt {
    public int stringToInt(String str) {
        int start = 0, p = 0, n = str.length();
        boolean negative = false;
        // 跳过前导空格
        while (p < n && str.charAt(p) == ' ') ++p;
        if (p == n) return 0;
        // 判断正负数
        if (str.charAt(p) == '+') ++p;
        else if (str.charAt(p) == '-') {
            ++p;
            negative = true;
        }
        // 跳过前导 0
        while (p < n && str.charAt(p) == '0') ++p;
        start = p;

        // 拿到数字最小位数 的 下一位
        while (p < n && str.charAt(p) >= '0' && str.charAt(p) <= '9') ++p;
        if (p == start) return 0;

        // 超过 int 的最大值
        if (p - start > 10) {
            if (negative) return Integer.MIN_VALUE;
            else return Integer.MAX_VALUE;
        }

        long num = 0;
        for (int i = start; i < p; i++)
            num = num * 10 + (str.charAt(i) - '0');
        num = negative ? -num : num;

        if (num < Integer.MIN_VALUE) return Integer.MIN_VALUE;
        else if (num > Integer.MAX_VALUE) return Integer.MAX_VALUE;
        return (int) num;
    }
}
